package com.rd.teacher.jichao.day04;

import java.util.Random;

public class TestString {

    // 2、给定一个长度，随机产生一个该长度的字符串，由大写、小写字母以及数字组成
    // 模拟生成验证码的逻辑
    // 给出一个长度 4，一个一个字符来生成
    // 先定义一个枚举，分为三种类型，大写字母、小写字母和数字，对应123三个数字
    // 随机 [1,3] 范围内的数字，
    // 如果随机结果是大写字母，又要在 [A,Z] 范围内随机，[1,26]  [0,25]
    // char[] arr = {'A','B' ... 'Z'}
    // 如果随机结果是小写字母，复用大写字母的随机规则，然后将大写字母转化为小写字母
    // 如果是数字，[0,9]
    // ‘6Q2a’

    public static void main(String[] args) {
//        System.out.println(verifyCode1(6));
        System.out.println(verifyCode2(6));
    }

    public static String verifyCode1(int l) {
        char[] c1 = new char[l];
        //给定一个包含大小写字母和数字的字符串
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        char[] c2 = str.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < l; i++) {
            int j = (int) (Math.random() * 62);
            c1[i] = c2[j];
            stringBuilder.append(c1[i]);
        }
        return stringBuilder.toString();
    }


    public static String verifyCode2(int length) {
        StringBuilder stringBuilder = new StringBuilder();
        // 随机大写字母、小写字母、数字三种类型
        // 2 1 0
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            int key = random.nextInt(3);
            switch (key) {
                case 0:
                    int code1 = random.nextInt(10);
                    stringBuilder.append(code1);
                    break;
                case 1:
                    char code2 = (char) (random.nextInt(26) + 'a');
                    stringBuilder.append(code2);
                    break;
                case 2:
                    char code3 = (char) (random.nextInt(26) + 'A');
                    stringBuilder.append(code3);
            }
        }
        return stringBuilder.toString();
    }

}
